package com.example.mybaties.testone.mapper;

import com.example.mybaties.testone.domain.SysRole;
import com.example.mybaties.testone.domain.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserMapper {

    /**
     * 根据id查找用户
     * @param id 用户的id
     * @return 查找到的用户
     */
    SysUser selectById(Long id);

    /**
     * 查询所有的用户
     */
    List<SysUser> selectAllUser();

    /**
     * 根据用户查询该用户的所有角色
     * @param user
     */
    List<SysRole> selectRolesByUser(SysUser user);

    /**
     * 插入用户
     * @param user
     */
    int insertUser(SysUser user);

    /**
     * 根据userId和enable查询角色
     */
    List<SysRole> selectRolesByUserIdAndRoleEnable(@Param("userId") Long userId,
                                                   @Param("enable") Integer enable);

    /**
     * 根据用户名和邮箱查询用户
     */
    List<SysUser> selectUserByUserNameAndEmail(@Param("userName") String userName, @Param("email") String email);

    /**
     * 更新用户
     */
    int updateUser(SysUser user);

    /**
     * 根据id或者用户名查询
     */
    List<SysUser> selectUserByIdOrUserName(SysUser sysUser);

    /**
     * 根据id集合查询用户
     */
    List<SysUser> selectByIds(List<Long> ids);

    /**
     * 批量插入用户
     */
    int insertUserList(List<SysUser> users);

    /**
     * 根据map提供的内容进行更新
     */
    int updateByMap(@Param("map") Map<String, Object> map, @Param("id") Long id);

    /**
     * 根据id查询用户和角色
     */
    SysUser selectUserAndRoleById(Long id);

    /**
     * 查询所有用户的所有角色
     */
    List<SysUser> selectAllUserAndRoles();

    /**
     * 查询所有用户的所有角色的所有权限
     */
    List<SysUser> selectAllUserAndRolesAndPrivileges();

    /**
     * 根据用户名查找用户
     * @param name 用户名
     */
    SysUser selectUserByName(String name);

    /**
     * 根据用户名查找用户的所有角色和权限
     */
    SysUser selectUserContainsRoleAndPrivilegeByName(String name);


}
